﻿// @ts-ignore
import {BACKEND_HOST_LOCAL, BACKEND_HOST_PROD} from '@/constants';
import {LOGIN_EVENT, USER_TOKEN_KEY} from "@/constants/sysConstants";
import axios from 'axios';
// @ts-ignore
import { createUniAppAxiosAdapter } from '@uni-helper/axios-adapter'

const isDev = process.env.NODE_ENV === 'development';

/**
 * @name 错误处理
 * pro 自带的错误处理， 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
const instance = axios.create({
    baseURL: isDev ? BACKEND_HOST_LOCAL : BACKEND_HOST_PROD,
    timeout: 10000,
    withCredentials: true,
    headers: {'X-Custom-Header': 'foobar'},
    adapter: createUniAppAxiosAdapter()
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const data = response.data;
    if (!data) {
        return;
    }
    if (data.code === 0) {
        console.log(data.data)
        return data.data;
    }
    if (data.code === 40100) {
        uni.setStorageSync(USER_TOKEN_KEY, '');
        uni.$emit(LOGIN_EVENT)
    }
    uni.showToast({
        icon: "none",
        title: data.description || data.message,
        duration: 2000
    });
    return null;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    uni.showToast({
        icon: "none",
        title: '出错了，请稍后再试！',
        duration: 2000
    });
    return Promise.reject(error);
});

export default instance;
